package com.zyq.globalException.exception;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

//@RestControllerAdvice是什么
//@RestControllerAdvice是一个组合注解，由@ControllerAdvice、@ResponseBody组成，而@ControllerAdvice继承了@Component，因此@RestControllerAdvice本质上是个Component，用于定义@ExceptionHandler，@InitBinder和@ModelAttribute方法，适用于所有使用@RequestMapping方法。
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler
    public String handleServiceException(RuntimeException e){
        log.debug("GlobalExceptionHandler---->handleServiceException()::捕获到RuntimeException：{}", e.getMessage());
        return  e.getMessage();
    }

    @ExceptionHandler
    public String handleThrowable(Throwable e){
        log.debug("GlobalExceptionHandler---->handleServiceException()::捕获到Throwable：{}", e.getMessage());
        e.printStackTrace(); // 强烈建议
        String message = "程序运行时出现未知错误，请联系系统管理员！";
        return  message;
    }
}


//@RestControllerAdvice的特点：
//1.通过@ControllerAdvice注解可以将对于控制器的全局配置放在同一个位置。
//2.注解了@RestControllerAdvice的类的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上。
//3.@RestControllerAdvice注解, 会生效于标注了 @RequestMapping的控制器的方法上。

//4.@ExceptionHandler：用于指定异常处理方法。当与@RestControllerAdvice配合使用时，用于全局处理控制器里的异常。
//5.@InitBinder：用来设置WebDataBinder，用于自动绑定前台请求参数到Model中。
//6.@ModelAttribute：当与@ControllerAdvice配合使用时，可以让全局的@RequestMapping都能获得在此处设置的键值对(本来作用是绑定键值对到Model中)

//注： @RestControllerAdvice和@ControllerAdvice可以用basePackages指定 Controller 范围
//basePackages： 指定一个或多个包，这些包及其子包下的所有 Controller 都被该 @ControllerAdvice 管理,比如：
//@RestControllerAdvice(basePackages={"com.zyq.controller"})
//@Slf4j
//public class ExceptionHandlerAdvice {   }

//basePackageClasses： 是 basePackages 的一种变形，指定一个或多个 Controller 类，这些类所属的
// 包及其子包下的所有 Controller 都被该 @ControllerAdvice 管理

//assignableTypes： 指定一个或多个 Controller 类，这些类被该 @ControllerAdvice 管理

//annotations： 指定一个或多个注解，被这些注解所标记的 Controller 会被该 @ControllerAdvice 管理

//相关链接： https://blog.csdn.net/user2025/article/details/105458842

